【お知らせ】 第030回(訂正前)のサンプルプログラム(HC_CG.s/Ver1.00)の一部に誤りがあったので 今回は訂正版のソースコード(HC_CG.s/Ver1.01)を公開します。 [ 変更箇所 ] ・equ疑似命令の部分にvsyncを追加 ・wait_v_syncルーチンを正しいプログラムに変更 皆さん、ご迷惑をおかけして申し訳ありませんでしたm(__)m ご指摘して頂いたx68000さん、本当に有り難う御座いますm(__)m 【X68000(Z)アセンブラ講座 第030回 CGの高速クリアー(訂正版)】   お久しぶりです!! 今回はCG画面に表示されている画像を一瞬でクリアーする方法を解説します。 破線の内側を'HC_CG.s'と言うファイル名で保存して下さい。 ------------------------------------------------------------------------------------------------ ******************************************************************************** * * アプリ名 : HC_CG.x * * CG画面高速クリアー * * Ver1.01 * ******************************************************************************** include A:\XC\INCLUDE\DOSCALL.MAC include A:\XC\INCLUDE\IOCSCALL.MAC gpip equ $E88001 crtc_r21 equ $E8002A crtc_mode equ $E80480 vsync equ $E88001 * %00010000でV-Syncチェックする .cpu 68000 .data msg01: dc.b 'スペースキーを押すとCG画面が高速に消えます。',13,10,0 .even .text start: * ユーザーモードからスーパーバイザーモードに切り替え moveq.l #_B_SUPER,d0 movea.l #0,a1 trap #15 * 画面モードの設定 moveq.l #_CRTMOD,d0 * 画面モードの設定 move.w #12,d1 * 画面モードの番号 : 16 = 768x512x4bit / 12 = 512x512x16bit trap #15 * 画面をクリアして表示をオンにする moveq.l #_G_CLR_ON,d0 * 画面をクリアして表示をオンにする trap #15 bsr draw_cg * CG画面に画像を描画する代わりに紫色で塗り潰す pea msg01 dc.w _PRINT addq.l #4,sp * スペースキーが押されるまで待つ key_space: moveq.l #_BITSNS,d0 moveq.l #6,d1 trap #15 and.b #%00100000,d0 tst.b d0 beq key_space bsr wait_v_sync * CG画面の高速クリアー move.w #%0000_1111,crtc_r21 * 65536色1面 move.w #%0000_0010,crtc_mode * CG高速クリアー開始 dc.w _EXIT * CG画面を紫色に描画する draw_cg: movea.l #$C00000,a0 move.w #511,d7 draw_cg_1: move.w #511,d6 draw_cg_2: move.w #%00000_01111_01111_0,(a0)+ * 紫色のピクセルを描画 dbra d6,draw_cg_2 dbra d7,draw_cg_1 rts wait_v_sync: * V-Syncビットを監視してメインループを60fpsで動作させるタイミングを取る move.l a0,-(sp) movea.l #vsync,a0 wait_v_sync_1: move.b (a0),d0 and.b #$10,d0 tst.b d0 beq wait_v_sync_1 wait_v_sync_2: move.b (a0),d0 and.b #$10,d0 tst.b d0 bne wait_v_sync_2 move.l (sp)+,a0 rts * [EOF] ------------------------------------------------------------------------------------------------ ファイルの保存が終わったらコマンドプロンプトから、 A>AS HC_CG.s [Enter] A>LK HC_CG.o [Enter} A>HC_CG.x [Enter] 以上(↑)のように入力するとプログラムが起動します。 今回はCG画面をクリアーするだけなので簡単に理解できた方もいると思いますが いろんなゲームのいろんなシーンで役立つと思いますので 是非とも皆さんの作りたいゲームに取り入れてほしいと思います!! [EOF]